Many modern computing services have distributed architectures that are comprised of separate applications or software that provide different functionality yet work together to provide software services to users. By way of example, a web application may have a multi-tier architecture that uses different software modules for performing presentation, control logic, and database functions. In another example, an enterprise computer network may be comprised of computer workstations, a directory service for authenticating users, and software management services that tracks and updates software installed on the different workstations. Distributed systems may also include multiple instances of the same application or software for redundancy purposes, or to scale the capabilities of the software service. For example, a multi-tier application may have a load balancer and multiple front-end servers for handling a larger throughput of client requests.
The deployment and management of distributed computing systems can be costly in large scale environments. Many computers have to be provisioned, configured, tested, and subsequently updated with the appropriate software packages, each software package having the correct configurations to communicate and function with other computing devices in the same environment. Therefore, it is desirable to simplify the deployment and service location problems for large-scale distributed systems, such as in a Microsoft Active Directory® environments.